package stack;

import java.util.Stack;
/**
 * P1957  最美字符串
 * */
public class P1957 {
    public static void main(String[] args) {
        P1957Test02 p1957Test02=new P1957Test02();

        String s = p1957Test02.makeFancyString("leeetcode");
        System.out.println(s);
    }
}
/**
 * 解法一：栈，但是时间多
 */
class P1957Test01{
    Stack<Character> stack;
    public String makeFancyString(String s) {
        stack=new Stack<>();

        int length=s.length();
        int flagNum=1;
        for(int i=0;i<length;i++){
            Character c=s.charAt(i);
            //保证空栈的话直接入栈
            if(stack.isEmpty())
            {
                stack.push(c);
                continue;
            }
            //判断是否是重复，更新重复标签数量
            if(stack.peek()!=c){
                flagNum=1;
                stack.push(c);
                continue;
            }
            //重复的不用入栈
            if(flagNum==2){
                continue;
            }
            //如果剩下重复就是直接入栈
            if(stack.peek()==c){
                stack.push(c);
                flagNum++;
            }

        }

       StringBuffer stringBuffer=new StringBuffer();

        for(Character a:stack){
            stringBuffer.append(a);
        }
        return stringBuffer.toString();
    }
}
/**
 * 解法二：字符串，利用标签来记录是否超过2
 * 利用StringBuffer来相加
 * StringBuffer线程安全，然后string的相加是会新建一个新的string对象，速度会很慢，然后StringBuffer是字符数组，可以直接相加，速度会很快
 * */
class P1957Test02{
    public String makeFancyString(String s){
        StringBuffer stringBuffer=new StringBuffer();

        int flagNum=1;

        char[] s1=s.toCharArray();
        int length=s1.length;
//        int j=0;
        stringBuffer.append(s1[0]);
        char k=stringBuffer.charAt(0);
        for(int i=1;i<length;i++){
            char c=s1[i];

            if(k!=c){
                flagNum=1;
                stringBuffer.append(c);
                k=c;
                continue;
            }


            if(flagNum==2)
                continue;

            if(k==c){
                flagNum++;
                stringBuffer.append(c);
                k=c;
            }

        }

        return stringBuffer.toString();
    }
}
